There are various recognized software development processes and methodologies. For example, the waterfall development methodology (i.e. linear methodology) provides a sequential approach to software development, according to which the development process is divided into various phases. These phases may include requirement analysis, software design, implementation, testing, integration, deployment and maintenance. Every phase of the development process is strictly defined in the beginning of the development process. For each of the phases, only if the particular requirements of the respective phase are met, can the byproduct of the respective phase advance to the next phase. Generally, the waterfall development methodology requires formal approvals and documentations in the beginning and at the end of each phase.
On the other hand, agile software development methodologies do not include the strict structure of, and are more flexible than, the water fall methodology. Agile processes adapt to changes of the project requirements and to particular needs of the project at any given moment. In other words, rather than creating formal documents to iterate and predict the requirements of the development project from beginning to the end, agile processes focus on the needs of the updated software as they evolve. In agile processes, the various phases are not strictly delineated in linear sequential fashion. For example, a testing phase is not necessarily a separate phase that is implemented only after completion of software design. Rather, testing may occur concurrently with designing and implementing other aspects of a development object.
Branching is an agile software development methodology, where each development element is assigned to a separate branch, with various development branches being worked on simultaneously. Branching provides a lot of flexibility, isolation and freedom for developers.